<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // call apply  bind
        //    共同点：三个都能改变函数内 this 的执行
        //    不同点：
        //         1. call apply 是会调用的。
        //         2. bind 不会调用，是返回了一个新的函数，那个函数已经对 this 进行了绑定

        const fupo = {
            name: '富婆',
            say(a, b) {
                console.log(`这是 ${this.name}`, a, b);
            }
        }

        const ds = {
            name: '屌丝'
        }

        // fupo.say(1,2);

        const fn = fupo.say.bind(ds);
        console.log(fn)

        fn(666,777);
        fn(888,999);
        fn();

        // 小结 bind:
        //      1. bind 并不会直接调用函数，是返回锁定了 this 的新函数
        //      2. bind 有两种实参的方式：
        //          1. bind(新this, 参数1, 参数2 );
        //          2. const fn = bind(新this);   fn( 参数1, 参数2 );


    </script>
</body>

</html>